// 函数柯里化： 多个参数传入，把它转化成n个函数，每个函数一个参数



// 记录传入的参数，并且和函数的参数个数做比较，参数个数一致，执行函数
function curring(fn) {
    const inner = (args = []) => {
        return args.length >= fn.length ? fn(...args) : (...userArgs) => inner([...args, ...userArgs]);
    }
    return inner();
}

// function isType(typing, val) {
//     return Object.prototype.toString.call(val) === `[object ${typing}]`;
// }
// let util = {};
// ['String', 'Number', 'Boolean', 'Null', 'Undefined'].forEach(type => {
//     util[`is${type}`] = curring(isType)(type);
// })
// console.log(util.isString('abc'));

function sum(a, b, c, d) {
    return a + b + c + d;
}

let sum1 = curring(sum);
let sum2 = sum1(1);
let sum3 = sum2(2, 3);
let result = sum3(4);

console.log(result); // 10
